package com.example.design.patterns.geekbang.创建型.工厂模式.原理解析;

import cn.hutool.core.util.StrUtil;
import com.example.design.patterns.geekbang.创建型.工厂模式.原理解析.dependent.IRuleConfigParser;
import com.example.design.patterns.geekbang.创建型.工厂模式.原理解析.dependent.JsonRuleConfigParser;
import com.example.design.patterns.geekbang.创建型.工厂模式.原理解析.dependent.PropertiesRuleConfigParser;
import com.example.design.patterns.geekbang.创建型.工厂模式.原理解析.dependent.XmlRuleConfigParser;
import com.example.design.patterns.geekbang.创建型.工厂模式.原理解析.dependent.YamlRuleConfigParser;
import java.util.HashMap;
import java.util.Map;

/**
 * 单例模式 + 简单工厂模式/静态工厂方法模式 结合
 */
public class RuleConfigParserFactory {
    private static final Map<String, IRuleConfigParser> cachedParsers = new HashMap<>();

    static {
        cachedParsers.put("json", new JsonRuleConfigParser());
        cachedParsers.put("xml", new XmlRuleConfigParser());
        cachedParsers.put("yaml", new YamlRuleConfigParser());
        cachedParsers.put("properties", new PropertiesRuleConfigParser());
    }

    static IRuleConfigParser createParser(String type) {
        IRuleConfigParser parser = null;
        if (StrUtil.isBlank(type)) {
            return parser;
        }
        parser = cachedParsers.get(type.toLowerCase());
        return parser;
    }
}